/* Includes ------------------------------------------------------------------*/
#include "beep.h"
#include "gpio.h"

/*----------------------------------------------------------------------------*/
/* Configure beep                                                        */
/*----------------------------------------------------------------------------*/

void BEEP_Init(void) {
  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOB_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(beep_GPIO_Port, beep_Pin, GPIO_PIN_SET);

  /*Configure GPIO pin : PtPin */
  GPIO_InitStruct.Pin = beep_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(beep_GPIO_Port, &GPIO_InitStruct);
}

void RCCdelay_us(uint16_t udelay)
{
  __IO uint32_t Delay = udelay * 72 / 8;
  do {
    __NOP();
  }
  while (Delay--);
}

void BEEP_Alarm(uint16_t delay) {
  uint8_t i;

  for (i = 0; i < 200; i++) {
    HAL_GPIO_TogglePin(beep_GPIO_Port, beep_Pin);
    RCCdelay_us(delay);
  }
}

void BEEP_Received(void) {
  uint16_t i;
	
	for (i = 0; i < 300; i++) {
		HAL_GPIO_TogglePin(beep_GPIO_Port, beep_Pin);
		RCCdelay_us(400);
	}
	for (i = 0; i < 400; i++) {
		HAL_GPIO_TogglePin(beep_GPIO_Port, beep_Pin);
		RCCdelay_us(300);
	}
}

void BEEP_Connect(uint8_t is_connected) {
  uint16_t i;

	if (is_connected) {
		for (i = 0; i < 250; i++) {
			HAL_GPIO_TogglePin(beep_GPIO_Port, beep_Pin);
			RCCdelay_us(450);
		}
		for (i = 0; i < 300; i++) {
			HAL_GPIO_TogglePin(beep_GPIO_Port, beep_Pin);
			RCCdelay_us(400);
		}
		for (i = 0; i < 400; i++) {
			HAL_GPIO_TogglePin(beep_GPIO_Port, beep_Pin);
			RCCdelay_us(300);
		}
	} else {
		for (i = 0; i < 400; i++) {
			HAL_GPIO_TogglePin(beep_GPIO_Port, beep_Pin);
			RCCdelay_us(300);
		}
		for (i = 0; i < 300; i++) {
			HAL_GPIO_TogglePin(beep_GPIO_Port, beep_Pin);
			RCCdelay_us(400);
		}
		for (i = 0; i < 250; i++) {
			HAL_GPIO_TogglePin(beep_GPIO_Port, beep_Pin);
			RCCdelay_us(450);
		}
	}
}
